package io.github.talelin.latticy.model.oms;

import java.math.BigDecimal;
import java.util.Date;

import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.github.talelin.latticy.common.enumeration.*;
import io.github.talelin.latticy.dto.order.CreateOrderDTO;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.beans.BeanUtils;

/**
 * @author generator@wulongbo
 * @since 2022-07-01
 */
@Data
@Accessors(chain = true)
@TableName("t_order")
@NoArgsConstructor
@AllArgsConstructor
public class OrderDO {


    /**
     * 订单号
     */
    @TableId(value = "order_no", type = IdType.INPUT)
    private Long orderNo;

    /**
     * 租户
     */
    private String tenant;

    /**
     * warehouseCode
     */
    private String warehouseCode;

    /**
     * 物流方式/承运商
     */
    private String logistics;

    /**
     * 跟踪号
     */
    private String trackingNo;

    /**
     * 参考号
     */
    private String referenceNo;

    /**
     * 订单备注
     */
    private String remake;

    /**
     * 收件人
     */
    private String receiver;

    /**
     * 电子邮件
     */
    private String email;

    /**
     * 国家编码
     */
    private Integer countryCode;

    /**
     * 省/州编码
     */
    private Integer cityCode;

    /**
     * 城市/区编码
     */
    private Integer areaCode;

    /**
     * 公司名称
     */
    private String companyName;

    /**
     * 联系电话
     */
    private String phone;

    /**
     * 邮编
     */
    private String postCode;

    /**
     * 收件地区
     */
    private String address;

    /**
     * 收件地区2
     */
    private String addressAnother;

    /**
     * 详细地址/门牌号
     */
    private String detail;


    /**
     * 创建类型(1：手动创建   2：平台推送  3: ...)
     */
    private CreateTypeEnum createType;

    /**
     * 订单类型(区分一件代发发的订单，还是转运的订单)
     */
    private OrderTypeEnum orderType;

    /**
     * 订单状态(0：草稿，1：审核通过，2：已取消，3：驳回)
     */
    private OrderStatusEnum status;

    /**
     * 运输方式
     */
    private ShipTypeEnum shipType;


    /**
     * 订单总价
     */
    private BigDecimal totalPrice;
    /**
     * 包裹重量
     */
    private Double packageWeight;

    /**
     * 币种
     */
    private MoneyTypeEnum moneyType;

    /**
     * 店铺名称
     */
    private String shopName;

    /**
     * 店铺code
     */
    private String shopCode;

    /**
     * 操作类型
     */
    private Integer operationType;

    /**
     * 平台类型
     */
    private String platformType;

    /**
     * 客户代码
     */
    private String creatorCode;

    private String  remarks;

    @JsonIgnore
    private Date createTime;

    @JsonIgnore
    private Date updateTime;

    @TableLogic
    @JsonIgnore
    private Date deleteTime;

    public OrderDO(CreateOrderDTO dto, Long orderNo) {
        BeanUtils.copyProperties(dto, this);
        this.orderNo = orderNo;
    }

}
